/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ssp.service;

import java.util.ArrayList;
import java.util.List;

/**
 * フロントエンドサーバで提供するサービスのエントリを表すクラス
 * @author yamazaki
 */
public class ServiceEntry {

    /**
     * サービスの種類
     */
    private final int typeID;
    
    /**
     * サービスの処理負荷
     */
    private double workload;
    
    /**
     * QoS指標のリスト
     */
    private List<Integer> QoSindexList;
    
    /**
     * 単位時間あたりの利用料金
     */
    private double charge;
    
    /**
     * コンストラクタ
     * @param typeID サービスの種類
     */
    public ServiceEntry(int typeID) {
        this.typeID = typeID;
    }
    
    /**
     * コンストラクタ
     * @param typeID サービスの種類
     * @param workload サービスの処理負荷
     * @param QoSindexList QoS指標のリスト
     * @param charge 利用料金
     */
    public ServiceEntry(int typeID, double workload, List<Integer> QoSindexList, double charge) {
        this.typeID = typeID;
        this.workload = workload;
        this.QoSindexList = new ArrayList<>(QoSindexList);
        this.charge = charge;
    }

    /**
     * @return the typeID
     */
    public int getTypeID() {
        return typeID;
    }

    /**
     * @return the workLoad
     */
    public double getWorkload() {
        return workload;
    }

    /**
     * @return theQoSindex
     */
    public int getQoSindex(int index) {
        return QoSindexList.get(index);
    }

    /**
     * @return the QoSindexList
     */
    public List<Integer> getQoSindexList() {
        return QoSindexList;
    }

    /**
     * @return the charge
     */
    public double getCharge() {
        return charge;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final ServiceEntry other = (ServiceEntry) obj;
        if (this.typeID != other.typeID) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 17 * hash + this.typeID;
        return hash;
    }

}
